package com.tywj.panda.customer.common.http


import com.tywj.lib.core.common.util.LogUtil
import com.tywj.lib.core.common.util.ResourcesUtil
import com.tywj.lib.net.retrofit.callback.StringCallback
import com.tywj.panda.customer.common.R
import com.tywj.panda.customer.common.tool.LogoutTool

/**
 * @desc 网络请求回调基类
 * @author June Yang
 * @date 2020/5/8
 *
 * @param isHandleErrorSelf 是否需要自行处理请求出错，即网络请求成功，服务器返回的错误。
 */
abstract class PDBaseCallback(private val isHandleErrorSelf: Boolean) : StringCallback() {

    companion object {
        val ERROR_DATA_DESC = ResourcesUtil.getString(R.string.net_retrofit_error_data)
    }

    override fun onError(code: Int, message: String) {
        super.onError(code, message)

        error(code, message)
    }

    open fun error(code: Int, message: String) {
        LogUtil.e("code: $code, message: $message")
    }

    protected fun handleAsyncRequestError(code: Int, msg: String) {
//        if (isHandleErrorSelf) {
//            // 不需要处理错误情况，交给该请求自行处理
//            error(code, msg)
//            return
//        }

        when (code) {
            //用户已过期，需重新登陆
            401, 11010 -> LogoutTool.logout(R.string.common_account_login_token_is_expired)

            // token过期 code 待定
//            1303 -> AuthorityTool.requestUpdateToken(request.lifecycleOwner) {
//                HttpTool.retryRequest(this)
//            }

            // 无效的token code 待定
            1304 -> LogoutTool.logout(R.string.common_account_abnormal)

            // 账号已在其他设备登录    // 无效的token code 待定
            1305 -> LogoutTool.logout(R.string.common_account_login_other_device)

            else -> error(code, msg)
        }

    }
}